/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.losalpes.buy;

import com.losalpes.persistence.entity.Ciudad;
import com.losalpes.persistence.entity.Cliente;
import com.losalpes.persistence.entity.Compra;
import com.losalpes.persistence.entity.Mueble;
import com.losalpes.persistence.entity.TipoMueble;
import javax.ejb.Local;
import java.util.List;
import java.sql.Date;
import javax.faces.model.SelectItem;
/**
 * Clase que administra la logica de negocio de las compras
 * @author CSI
 */
@Local
public interface IBuyService {

    /**
     * Permite añadir una compra
     * @param compra
     */
    void add(Compra compra);

    /**
     * permite eliminar na compra
     * @param compra
     */
    void delete(Compra compra);

    /**
     * realiza una busqueda de todas las compras
     * @return Lista
     */
    List<Compra> findAllCompras();

    /**
     * Permite verificar si un cliente tiene compras
     * @param idCliente id del cliente
     * @return booleano
     */
    boolean hayComprasCliente(Cliente cliente);

    /**
     * Permite verificar si un mueble esta incluido en una compra
     * @param referencia
     * @return booleano
     */
    boolean hayComprasMueble(Mueble mueble);

    /**
     * Obtiene una lista de las comra del cliente
     * @param idCliente id del cliente
     * @return lista de compras asociadas
     */
    public List comprasCliente(Cliente cliente);

    /**
     * Busca el producto mas vendido en un periodo de tiempo dado
     * @param fechaIni fecha inicial del periodo
     * @param fechaFin fecha final del periodo
     * @return La lista con elementos para saber ciudad y cantidades
     */
    public List productoMasVendido(Date fechaIni, Date fechaFin);

    /**
     * Obtiene el nombre de una ciudad basado en el Id
     * @param ciudad
     * @return
     */
    public String nombreCiudad(int ciudad);

    /**
     * Permite obtener una lista de las venas diarias por tipo de mubel
     * @param ciudad
     * @param fechaIni
     * @param fechaFin
     * @param tipo
     * @return
     */
    public List ventasDiariasTipo(Ciudad ciudad, Date fechaIni, Date fechaFin, TipoMueble tipo);

    /**
     * Obtiene una lista de documentos
     * @return
     */
    public SelectItem[] getDocumentos();
}
